{ Siberian Olympiad. 2 stage.
  Problemset: http://agul-problems1.googlecode.com/svn/trunk/2010-2011/wso/stage2/wso_2stage.pdf
  Problem 1.
  Points: 100
}
uses
  SysUtils,
  math;

type vv = record
           x, y: longint;
          end;
     rbrx = record
       x,y:longint;
     end;
var a, b,c: array[1..100001] of vv;
  m, i, j, k, n,rbrt,tox,toy,io: longint;
  answer:extended;
  rbr:rbrx ;
function vect(a1,a2,b1,b2: vv): longint;
begin
  vect := (a2.x - a1.x)*(b2.y - b1.y) -
          (b2.x - b1.x)*(a2.y - a1.y);
end;
function dist2(a1,a2: vv): longint;
begin
  dist2 := sqr(a2.x - a1.x) + sqr(a2.y - a1.y)   ;
end ;
function distev(Av:longint;Bv:rbrx):extended;
var
x1,y2,x2,y1:longint;
begin
x1:=B[bv.x].x-B[av].x;
x2:=B[bv.y].x-B[av].x;
y1:=B[bv.x].y-B[av].y;
y2:=B[bv.y].y-B[av].y;
if (sqrt(sqr(b[bv.y].x-b[bv.x].x)+sqr(b[bv.y].y-b[bv.x].y)))<>0 then
  distev:=abs(x1*y2-x2*y1)/
  (sqrt(sqr(b[bv.y].x-b[bv.x].x)+sqr(b[bv.y].y-b[bv.x].y)))   
  else distev:=sqrt(sqr(B[av].x-B[bv.x].x)+sqr(B[av].y-B[bv.x].y));
end;
function next(L:longint):longint;
begin
  inc(l);
  if l=k+1 then l:=1;
  next:=l;
end;

function QSB(P1,P2:longint):boolean;
begin
     if (vect(a[1],a[P1],a[1],a[p2]) < 0) or
       ((vect(a[1],a[p1],a[1],a[p2]) = 0 ) and
      (dist2(a[1],a[p1]) > dist2(a[1],a[p2])))  then
      qsb:=TRUE else qsb:=False;
end;

function distvv(av,bv:longint):extended;
begin
  distvv:=sqrt(sqr(b[bv].x-b[av].x)+sqr(b[bv].y-b[av].y));
end;
    procedure sort(l,r: longint);
     var i,j,x: longint;
   begin
     i := l;
     j := r;
     A[n+1] := A[(l + r) div 2];
     x:=N+1;
     repeat
        while qsb(x,i) do inc(i);
        while qsb(j,x) do dec(j);
       if not (i>j) then
         begin
           B[n] := A[i];
           A[i] := A[j];
           A[j] := B[n];
           inc(i);
           dec(j);
         end;
     until i>j;
     if l < j then sort(l,j);
     if i < r then sort(i,r);
   end;
begin
reset(input,'input.txt');
rewrite(output,'output.txt');
  readln(n);
  for i := 1 to n do
    readln(a[i].x, a[i].y);
    if n=2 then begin writeln(1,' ',2);    halt; end;
    c:=a;
   m := 1;
for i := 2 to n do
    if a[i].y < a[m].y then m := i else
    if (a[i].y = a[m].y) and
       (a[i].x > a[m].x) then m := i;
   b[1] := a[m];
  a[m] := a[1];
  a[1] := b[1];  {  &#205;&#229;&#253;&#244;&#244;&#229;&#234;&#242;&#232;&#226;&#237;&#238;
  for i := n downto 3 do
    for j := 2 to i - 1 do
     if (vect(a[1],a[j],a[1],a[j + 1]) < 0) or
       ((vect(a[1],a[j],a[1],a[j + 1]) = 0 ) and
      (dist2(a[1],a[j]) > dist2(a[1],a[j + 1])))
        then
begin    b[n] := a[j];
        a[j] := a[j + 1];
        a[j + 1] := b[n] ;
      end;      }  Sort(2,n);
   i := 2;
//  while vect(a[1],a[i + 1],a[1],a[2]) = 0 do   begin
 //  i := i + 1;  if i=n-1 then break;
 //   end;
  b[2] := a[i];
  b[3] := a[i + 1];
  k := 3;
for i := i + 2 to n do
   begin
while vect(b[k - 1],b[k],b[k],a[i]) <= 0 do
    begin   k := k - 1;  if k=1 then break;
    end;
     k := k + 1;
     b[k] := a[i] ;
   end;
 //===
 rbr.x:=1;
 rbr.y:=2;
 answer:=-1;
 for I := 1 to k do
    begin
     if distev(i,rbr)>answer then
    begin answer:=distev(i,rbr); rbrt:=i; end;
    end;
  answer:=distev(rbrt,rbr);
  tox:=2;
  if distvv(1,rbrt)>distvv(2,rbrt) then
        tox:=1;
  toy:=rbrt;
  for I := 1 to k-1 do
    begin  
      inc(rbr.x);
      inc(rbr.y);
     if rbr.y=k+1 then    rbr.y:=1;     
    while distev(rbrt, rbr) < distev(next(rbrt), rbr) do
          rbrt := next(rbrt);
          if  distvv(rbr.x,rbrt)>answer then
             begin
               tox:=rbr.x;
               toy:=rbrt;
             end;
        answer:=max(answer, distvv(rbr.x,rbrt));
          if  distvv(rbr.y,rbrt)>answer then
             begin
               tox:=rbr.y;
               toy:=rbrt;
             end;
        answer:=max(answer, distvv(rbr.y,rbrt));
    end;
 for i := 1 to n do
   begin
     if (c[i].x=B[tox].x) and (c[i].y=B[tox].y) then
        begin write(i,' '); io:=i; break; end;
   end;
    for i := 1 to n do
   begin
     if ((c[i].x=B[toy].x) and (c[i].y=B[toy].y)) and (i<>io) then
        begin writeln(i); break; end;
   end;
  close(input);
  close(output);
end.